package capitulo3;

/**
 * Literales, asignaciones y variables (Objetivos 1.3 y 7.6) 
 * 
 * 1.3 Desarrolar un codigo que declare, inicialice y use datos 
 * primitivos, arrays, enumeraciones y objetos estaticos, instancias 
 * y variables locales. Tambien usa identificadores validos para 
 * los nombres de las variables.
 * 
 * 7.6 Escribir codigo que aplique correctamente los operadores apropiados
 * incluyendo los operadores de asignacion (limitado a =, +=, -=)...
 */

public class Tema19_Literales01 {
	
	/* Variable de Instancia tiene un valor por defecto */
	int year; // valor por defecto 0
	
	/* Variable de referencia de Instancia es otra cosa, debe ser inicializada*/
	private String title; // instance reference variable
    public String getTitle() {
        return title;
    }
	
    /* Variables de instancia tipo array*/
    static int [] anio = new int[100];
    
	public static void main(String [] args) {
    
		/* Literales octales */
		int six   = 06; // Equal to decimal 6
        int seven = 07; // Equal to decimal 7
        int eight = 010; // Equal to decimal 8
        int nine  = 011; // Equal to decimal 9
        System.out.println("Literales octales");
        System.out.println("Octal 07 = " + seven);
        System.out.println("Octal 010 = " + eight);
        System.out.println("Octal 011 = " + nine);
        
        /* Literales hexadecimales */
        int x = 0X0001;
        int y = 0x7fffffff;
        int z = 0xDeadCafe;
        System.out.println("\nLiterales hexadecimales");
        System.out.println("x = " + x + " y = " + y + " z = " + z);
        long jo = 110599L;
        long so = 0xFFFFl; // fijate en la 'l'
        System.out.println("(jo = 110599L): "+jo +" - "+"(so = 0xFFFFl): "+so);
        
        /*Asignacion de datos primitivos*/
        byte b = 3; // No hay problema, el 3 cabe en un byte
        byte c = 8; //No hay problema, el 8 cabe en un byte
        //byte d = b + c; 	// No deberia de haber problema, la suma de dos bytes
        					// cabrian en un byte  -> daria error, necesita casting
        byte a = (byte) (b + c);
        System.out.println("byte a: "+a);
        
        float a2 = 100.001f;
        int b2 = (int)a2; // Casteo explicito, la fraccion podria perderse
        System.out.println("int b2 = (int)a2: "+b2);
        
        float floa = 123.765f;
        short shor = (short)floa;
        System.out.println("\nAsignacion de datos primitivos");
        System.out.println("short shor = (short)floa: "+shor);
        
        /*Variables de instancia primitivas */
        System.out.println("\nVariables de instancia primitivas");
        Tema19_Literales01 bd = new Tema19_Literales01();
        bd.showYear();
        
        
        /* Variable Local, tiene que ser de ley inicializada
         * int var;
         * System.out.println(var);
         */
    
        
        /*Variables de instancia con referencias a objetos 
         *Mirar arriba esta el metodo "getTitle"
         *aqui la variable con referencia "title" no fue inicializada
         *por eso viene el resultado null.
         */
        System.out.println("\nVariables de instancia con referencias a objetos");
        String s = bd.getTitle();
        if(s != null)
        	System.out.println("The title is: " + bd.getTitle());
        else
        	System.out.println("La Variable String >s< contiene: "+s);

        
        /* Variables de instancia tipo array*/
        System.out.println("\n Variables de instancia tipo array ");
        for(int i=0;i < 100;i++)
            System.out.print("Year[" + i + "] = " + anio[i] + ", ");
	}
	public void showYear() {
        System.out.println("[Sin inicialzar varible de Instancia] The year is:" + year);
    }

}
